<?php
namespace app\api\controller;
class GrabFiles
{
    /**
     * 爬取网站
     */
    function webGrabs(): void
    {
        $name = input('name');//文件存放位置
        $url = input('url');//要爬取的网站地址
        $html = get_curl($url);
//        dump($html);die;
//        $html = iconv('GB2312','UTF-8',$html);
        preg_match_all('/src=("[^"]*")/i', $html, $src_arr);
        foreach ($src_arr[1] as $v){
            $v = str_replace('"','',$v);
            if ($this->isFileFormat($v)){
                if ($this->hasHttp($v)){
                    $parsedUrl = parse_url($v);
                    if (!isset($parsedUrl['path'])) continue;
                    $path = $this->isDiagonal($parsedUrl['path']);
                    $url2 = $v;
                }else{
                    $path = $this->isDiagonal($v);
                    $url2 = $url.$v;
                }
                if (empty($path)) continue;
                $this->downloadfile($url2,'./load/'.$name.'/'.$path);
            }
        }
//        preg_match_all('/href=("[^"]*")/i', $html, $href_arr);
//        foreach ($href_arr[1] as $v){
//            $v = str_replace('"','',$v);
//            if ($this->isFileFormat($v) && pathinfo($v, PATHINFO_EXTENSION) != 'html'){
//                if ($this->hasHttp($v)){
//                    $parsedUrl = parse_url($v);
//                    if (!isset($parsedUrl['path'])) continue;
//                    $path = $this->isDiagonal($parsedUrl['path']);
//                    $url2 = $v;
//                }else{
//                    $path = $this->isDiagonal($v);
//                    $url2 = $url.$v;
//                }
//                if (empty($path)) continue;
//                $this->downloadfile($url2,'./load/'.$name.'/'.$path);
//            }
//        }
//        $filePath = './load/'.$name.'/index.html';
//        // 确保目录存在
//        $dirName = pathinfo($filePath, PATHINFO_DIRNAME);
//        if (!is_dir($dirName)) {
//            mkdir($dirName, 0777, true); // 创建目录，并设置权限
//        }
//        file_put_contents($filePath, $html);
        dump($html);
    }

    function isDiagonal($str)
    {
        while (true){
            if (!str_starts_with($str, "/")) break;
            $str = substr($str, 1);
        }
        return $str;
    }

    /**
     * @param $address
     * @return bool
     * 判断是否为文件地址
     */
    function isFileFormat($address)
    {
        $info = pathinfo($address);
        return isset($info['extension']);
    }

    //下载远程文件 到指定目录
    public function downloadfile($file_url, $filePath)
    {

//        dump($file_url,$filePath);die;
//        if (!file_exists($file_url)) return false;
        // 确保目录存在
        $dirName = pathinfo($filePath, PATHINFO_DIRNAME);
        if (!is_dir($dirName)) {
            mkdir($dirName, 0777, true); // 创建目录，并设置权限
        }
        $file_data = file_get_contents($file_url); // 从URL获取文件数据
        return file_put_contents($filePath, $file_data); // 写入数据
    }

    public function hasHttp($url)
    {
        $parsedUrl = parse_url($url);
        return isset($parsedUrl['scheme']) && in_array($parsedUrl['scheme'], ['http', 'https']);
    }
}